package com.projectsexception.festivales.schedule.view;

import java.util.Date;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.ToggleButton;

import com.projectsexception.festivales.BandActivity;
import com.projectsexception.festivales.R;
import com.projectsexception.festivales.favorites.model.Favorite;
import com.projectsexception.festivales.setup.ProjectResources;
import com.projectsexception.festivales.setup.ShowInfo;
import com.projectsexception.festivales.util.DateFormater;

public abstract class AbstractTabScheduleViewInflater implements TabScheduleViewInflater {
    
    protected Activity activity;
    protected LayoutInflater inflater;
    protected final String[] colors = {"#9FB6CD", "#6C7B8B"};
    
    public AbstractTabScheduleViewInflater(Activity activity) {
        this.activity = activity;
        this.inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    
    public void inflateDates(List<Date> showDates, Date actualDate) {
        final ViewGroup buttonGroup = (ViewGroup) activity.findViewById(R.id.scroll_dates);
        int buttonId = 1;
        ToggleButton b;
        for (Date date : showDates) {
            b = (ToggleButton) inflater.inflate(R.layout.tab_schedule_date_button, null);
            if (date.equals(actualDate)) {
                b.setChecked(true);
            }
            b.setId(buttonId);
            String text = DateFormater.formatShowDate(date);
            b.setText(text);
            b.setTextOn(text);
            b.setTextOff(text);
            b.setTag(date);
            b.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View view) {
                    ToggleButton activeButton = (ToggleButton) view;
                    ToggleButton button;
                    for (int i = 0 ; i < buttonGroup.getChildCount() ; i++) {
                        button = (ToggleButton) buttonGroup.getChildAt(i);
                        if (button.getId() != activeButton.getId()) {
                            button.setChecked(false);
                        } else {
                            button.setChecked(true);
                        }
                    }
                    Date date = (Date) view.getTag();
                    AbstractTabScheduleViewInflater.this.inflateMainContent(date);
                }
            });
            buttonGroup.addView(b);
            buttonId++;
        }
    }
    
    public abstract void inflateMainContent(Date actualDate);
    
    public void inflateView(Date actualDate) {
        activity.setContentView(R.layout.tab_schedule_view);
        
        ProjectResources res = ProjectResources.getInstance(activity);
        List<Date> showDates = res.getShowDates();
        inflateDates(showDates, actualDate);
        
        inflateMainContent(actualDate);
    }
    
    /**
     * Crea la vista del grupo
     * @param show información del concierto
     * @param favorites lista de favoritos
     * @param padding
     * @param layoutParams
     * @return
     */
    protected LinearLayout createBandView(ShowInfo show, List<Favorite> favorites, int[] padding, LayoutParams layoutParams) {
        LinearLayout layoutBand = (LinearLayout) inflater.inflate(R.layout.tab_schedule_band, null);
        if (padding != null) {
            layoutBand.setPadding(padding[0], padding[1], padding[2], padding[3]);
        }
        LinearLayout bandContent = (LinearLayout) layoutBand.findViewById(R.id.band_view);
        if (layoutParams != null) {
            bandContent.setLayoutParams(layoutParams);
        }
        final int showId = show.getId();
        bandContent.setOnClickListener(new OnClickListener() {                
            @Override
            public void onClick(View view) {
                Intent band = new Intent(activity, BandActivity.class);
                band.putExtra(BandActivity.SHOW_ID, showId);
                activity.startActivity(band);
            }
        });
        TextView t = (TextView) layoutBand.findViewById(R.id.band_name);
        t.setText(show.getBand().getName());
        
        final ImageView imageFavorite = (ImageView) layoutBand.findViewById(R.id.band_favorite);
        Favorite showFavorite = getFavorite(show, favorites);
        if (showFavorite == null) {
            showFavorite = new Favorite(show);
            imageFavorite.setImageResource(R.drawable.tab_favorite_off);
        } else {
            imageFavorite.setImageResource(R.drawable.tab_favorite_on);
        }
        imageFavorite.setTag(showFavorite);
        imageFavorite.setOnClickListener(new OnClickListener() {                
            @Override
            public void onClick(View view) {
                ProjectResources res = ProjectResources.getInstance(activity);
                Favorite fav = (Favorite) imageFavorite.getTag();
                if (fav.getId() == 0) {
                    // Quiere decir que no está entre los favoritos
                    imageFavorite.setImageResource(R.drawable.tab_favorite_on);
                    res.saveFavorite(fav);
                } else {
                    // Ya estaba en los favoritos, luego hay que eliminarlo
                    imageFavorite.setImageResource(R.drawable.tab_favorite_off);
                    res.deleteFavorite(fav);
                }
            }
        });
        return layoutBand;
    }
    
    private Favorite getFavorite(ShowInfo showInfo, List<Favorite> favorites) {
        for (Favorite fav : favorites) {
            if (fav.getShowInfo().getId() == showInfo.getId()) {
                return fav;
            }
        }
        return null;
    }

}
